<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>16、Generator函数的语法——next()、throw()、return()的共同点</title>
	</head>
	<body>
		<script type="text/javascript">
			//六、next()、throw()、return()的共同点
			//网友 vision57 提出，next()、throw()、return()这三个方法本质上是同一件事，可以放在一起理解。它们的作用都是让 Generator 函数恢复执行，并且使用不同的语句替换yield表达式。
			//next()是将yield表达式替换成一个值。
			const g = function* (x,y){
				let result = yield x + y;
				return result;
			};
			const gen = g(1,2);
			console.log(gen.next())  //Object {value: 3, done: false}
			console.log(gen.next(1))  //Object {value: 1, done: true}
			// 相当于将 let result = yield x + y
			// 替换成 let result = 1;
			
			//上面代码中，第二个next(1)方法就相当于将yield表达式替换成一个值1。如果next方法没有参数，就相当于替换成undefined。
			//throw()是将yield表达式替换成一个throw语句.
//			console.log(gen.throw(new Error('出错了')));  //Uncaught Error: 出错了
			//// 相当于将 let result = yield x + y
			// 替换成 let result = throw(new Error('出错了'));

			//return()是将yield表达式替换成一个return语句
			console.log(gen.return(2)); //Object {value: 2, done: true}
			// 相当于将 let result = yield x + y
			// 替换成 let result = return 2;
			
		</script>
	</body>
</html>
